<?php
/**
 * 工单提交API
 * 
 * 该API用于提交工单信息，不支持上传截图
 * 
 * 请求方法: POST
 * Content-Type: application/x-www-form-urlencoded
 * 
 * 请求参数:
 * - qqNumber: QQ号码 (5-11位数字，不能以0开头)
 * - feedbackType: 反馈类型
 * - severity: 问题严重程度 (1-5)
 * - description: 问题描述 (最多2000字符)
 * 
 * 响应格式: JSON
 * - success: boolean 操作是否成功
 * - message: string 操作结果消息
 * - ticket_id: int 工单ID (仅在成功时返回)
 */

// 引入数据库配置
require_once '../config.php';
// 引入发送邮件函数
require_once '../send_email.php';

// 设置CORS头信息
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

// 处理OPTIONS请求
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    exit;
}

// 设置响应头为JSON格式
header('Content-Type: application/json');

// 检查请求方法是否为POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['success' => false, 'message' => '请求方法错误，只支持POST请求']);
    exit;
}

// 获取表单数据
$qqNumber = $_POST['qqNumber'] ?? '';
$feedbackType = $_POST['feedbackType'] ?? '';
$severity = $_POST['severity'] ?? '';
$description = $_POST['description'] ?? '';

// 验证表单数据
$errors = [];

if (empty($qqNumber) || !preg_match('/^[1-9][0-9]{4,10}$/', $qqNumber)) {
    $errors[] = '请输入有效的QQ号码（5-11位数字，不能以0开头）';
}

if (empty($feedbackType)) {
    $errors[] = '请选择反馈类型';
}

if (empty($severity) || !in_array($severity, ['1', '2', '3', '4', '5'])) {
    $errors[] = '请选择问题严重程度';
}

if (empty($description)) {
    $errors[] = '请描述您遇到的问题';
} elseif (strlen($description) > 2000) {
    $errors[] = '问题描述不能超过2000个字符';
}

// 如果有错误，返回错误信息
if (!empty($errors)) {
    echo json_encode(['success' => false, 'message' => $errors]);
    exit;
}

try {
    // 将工单数据插入数据库
    $sql = "INSERT INTO tickets (qq_number, feedback_type, severity, description, created_at)
            VALUES (:qq_number, :feedback_type, :severity, :description, NOW())";
    
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':qq_number', $qqNumber);
    $stmt->bindParam(':feedback_type', $feedbackType);
    $stmt->bindParam(':severity', $severity, PDO::PARAM_INT);
    $stmt->bindParam(':description', $description);
    
    $stmt->execute();
    
    // 获取插入的工单ID
    $ticketId = $pdo->lastInsertId();

    // 检查是否需要发送新工单通知
    try {
        $sql = "SELECT notification_enabled, notification_email FROM smtp_settings WHERE id = 1";
        $stmt = $pdo->query($sql);
        $settings = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($settings && $settings['notification_enabled'] && !empty($settings['notification_email'])) {
            // 发送新工单通知
            $subject = "新工单通知 #$ticketId";
            // 动态获取当前域名
            $protocol = isset($_SERVER['REQUEST_SCHEME']) ? $_SERVER['REQUEST_SCHEME'] : 'http';
            $domain = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost:8000';
            $base_url = $protocol . '://' . $domain;
            
            $message = "<p>收到新工单：</p>"
                     . "<p><strong>工单ID：</strong> $ticketId</p>"
                     . "<p><strong>QQ号码：</strong> $qqNumber</p>"
                     . "<p><strong>反馈类型：</strong> $feedbackType</p>"
                     . "<p><strong>严重程度：</strong> $severity</p>"
                     . "<p><strong>问题描述：</strong> $description</p>"
                     . "<p>请登录后台查看详情：<a href='$base_url/admin/view_ticket.php?id=$ticketId'>查看工单</a></p>";

            // 正确调用send_email函数，参数顺序为：收件人邮箱、收件人姓名、主题、邮件内容
            $success = send_email($settings['notification_email'], '管理员', $subject, $message);
        }
    } catch(PDOException $e) {
        error_log("查询SMTP设置失败: " . $e->getMessage());
    }

    echo json_encode([
        'success' => true, 
        'message' => '工单提交成功', 
        'ticket_id' => $ticketId
    ]);
} catch(PDOException $e) {
    // 在开发环境中，可以返回更详细的错误信息
    // 在生产环境中，应该记录错误日志并返回通用错误消息
    $errorMessage = '数据库错误，请稍后再试';
    
    // 仅在非生产环境中显示详细错误信息
    if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] === '127.0.0.1') {
        $errorMessage .= ' (' . $e->getMessage() . ')';
    }
    
    echo json_encode(['success' => false, 'message' => $errorMessage]);
}
?>